package wafqueue

import (
	"SamWaf/common/zlog"
	"SamWaf/global"
	"SamWaf/innerbean"
	"sync/atomic"
	"time"
)

/*
*
处理Log队列信息
*/
func ProcessLogDequeEngine() {
	for {
		global.GWAF_MEASURE_PROCESS_DEQUEENGINE.WriteData(time.Now().UnixNano() / 1e6)
		if global.GDATA_CURRENT_CHANGE {
			//如果正在切换库 跳过
			zlog.Debug("正在切换数据库等待中队列")

		} else {
			var webLogArray []innerbean.WebLog
			for !global.GQEQUE_LOG_DB.Empty() {
				atomic.AddUint64(&global.GWAF_RUNTIME_LOG_PROCESS, 1) // 原子增加计数器
				weblogbean, ok := global.GQEQUE_LOG_DB.Dequeue()
				if !ok {
					continue
				}
				if weblogbean != nil {
					// 进行类型断言将其转为具体的结构
					if logValue, ok := weblogbean.(innerbean.WebLog); ok {
						webLogArray = append(webLogArray, logValue)
					} else {
						//插入其他类型内容
						global.GWAF_LOCAL_LOG_DB.Create(weblogbean)
					}
				}
			}
			if len(webLogArray) > 0 {
				global.GWAF_LOCAL_LOG_DB.CreateInBatches(webLogArray, global.GDATA_BATCH_INSERT)
				global.GNOTIFY_KAKFA_SERVICE.ProcessBatchLogs(webLogArray)
			}
		}
		time.Sleep(100 * time.Millisecond)
		global.GWAF_MEASURE_PROCESS_DEQUEENGINE.WriteData(time.Now().UnixNano() / 1e6)
	}
}
